package xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

/**
 *  使用DOM4J解析XML文档
 */
public class ParseXmlDemo {
    public static void main(String[] args) {
        /*
            解析XMl的大致步骤
            1.创建SAXReader
            2.使用SAXReader读取xml文档并生成Document对象
            3.从Document对象中获取根元素
            4.从根元素开始按照xml文档的结构逐级获取子元素达到遍历目的
         */
        try {
            SAXReader reader = new SAXReader();
            Document doc = reader.read("./list.xml");
            /*
                Document对象内部封装了xml文档的整颗数结构
                其提供方法:
                Element getRootElement()
                用于获取文档中的根元素(根标签)
             */
            Element root = doc.getRootElement();
            /*
                    Element(元素)的每一个实例用于表示XML文档中的一对标签,
                    其提供了获取该标签相关信息的一组方法:
                    String getName()
                    获取元素名(标签名)

                    String getText()
                    获取元素体中的文本信息(开始和结束标签中间的文本信息)

                    Element element(String name)
                    获取当前元素下指定名字的子元素

                    List elements()
                    获取当前元素下所有子元素

                    List elements(String)
                    获取当前元素下所有指定的同名子元素

                    String elementText(String name)
                    获取当前元素下指定名字的元素中间的文本
                    e.elementText("abc")
                    等同于
                    e.element("abc").getText()
             */
            String name = root.getName();
            System.out.println("根标签名:" + name);

            //获取<list>下面的所有<emp>标签
            List<Element> list = root.elements("emp");
            System.out.println("<list>下共有"+list.size()+"个<emp>");
            //遍历每一个<emp>标签
            for (Element empEle : list){
                //获取该员工名字
                //1.通过<emp>标签获取下面的<name>子标签
                Element nameEle = empEle.element("name");
                //2.获取<name>中间的文本
                String uname = nameEle.getText();
                System.out.println(uname);

                Element ageEle = empEle.element("age");
                int age = Integer.parseInt(ageEle.getText());
                System.out.println(age);

                String gender = empEle.elementText("gender");
                System.out.println(gender);

                int salary = Integer.parseInt(empEle.elementText("salary"));
                System.out.println(salary);

                //获取员工id
                //1.获取到<emp>标签中的属性"id":Attribute attr = empEle.attribute("id");
                int id = Integer.parseInt(empEle.attributeValue("id"));
                System.out.println("id:"+id+","+uname+","+age+","+gender+","+salary);
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}
